/*****************************************************************************
 * 例程名称		 : 空工程
 * 说明         : 新建项目可以直接复制空工程开始编程。
 * 接线方式     : ---
 * 注意    		 : ---
 *******************************************************************************/

//--包含你要使用的头文件--//
#include "config.h" //通用配置头文件
#include "isr.h"
typedef struct {
    uint32_t header[2];         //记录头
	uint32_t power_on_cycle;         //数据区
	uint8_t threadhold[16];         //数据区
    uint8_t  reserved[100]; // 补齐到120字节
} config_t;

volatile config_t config_buf;
volatile uint8_t config_read_success = 0; // 配置读取成功标志
/* 稳定按键事件标记 */
volatile uint32_t keyPressEvent[2] = {0};
/* UART接收缓冲区 */
volatile uint8_t uart_rxdat[3];
/* UART接收状态机 */
volatile uint8_t uart_sm = 0;
/* UART接收完成标志 */
volatile uint8_t UART0_flag = 0;
/*************  本地常量声明    **************/
/*************  IO口定义    **************/
/*************  本地变量声明    **************/
/*************  本地函数声明    **************/
/****************  外部函数声明和外部变量声明 *****************/
/*******************************************************************************
 * 函 数 名         : main
 * 函数功能		     : 主函数
 * 输    入         : 无
 * 输    出         : 无
 *******************************************************************************/
int main(void)
{
	System_init(); // 天才第一步，使用SysConfig配置文件进行初始化。
#ifdef DEBUG	   // 调试模式下，检查GPIO是否复位和上电
#include <assert.h>
	assert(DL_GPIO_isReset(LED_PORT));
	assert(DL_GPIO_isPowerEnabled(LED_PORT));
#endif
	set_systick_ms(1);					  // 设置SysTick中断周期为1ms
	delay_ticks(500);
	NVIC_EnableIRQ(UART_0_INST_INT_IRQN); // 使能UART和定时器中断
	NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
	uint32_t st = EEPROM_TypeA_init((uint32_t*)&config_buf);
	if(st == EEPROM_EMULATION_INIT_OK)
	{
		config_read_success = 1;
	}
	else
	{
		config_read_success = 0;
	}
	
	while(DL_UART_Main_isBusy(UART_0_INST));
	DL_UART_Main_transmitData(UART_0_INST, config_buf.power_on_cycle%10+0x30);
	while(DL_UART_Main_isBusy(UART_0_INST));
	
	if(config_read_success == 1)
	{
		config_buf.power_on_cycle += 1; // 上电次数加1
		EEPROM_TypeA_writeData((uint32_t*)&config_buf); // 保存配置
		EEPROM_TypeA_readData((uint32_t*)&config_buf);
	}
	while (1)
	{
		if (keyPressEvent[0] == 1)
		{
			keyPressEvent[0] = 0;
			DL_UART_Main_transmitData(UART_0_INST, 'O');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, 'K');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, '\r');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, '\n');
			while(DL_UART_Main_isBusy(UART_0_INST));
		}
		if (keyPressEvent[1] == 1)
		{
			keyPressEvent[1] = 0;
			DL_UART_Main_transmitData(UART_0_INST, 'O');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, 'K');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, '\r');
			while(DL_UART_Main_isBusy(UART_0_INST));
			DL_UART_Main_transmitData(UART_0_INST, '\n');
			while(DL_UART_Main_isBusy(UART_0_INST));
		}
	}

	return 0;
}
